/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author rob
 */
@Stateless
public class VideogameFacade extends AbstractFacade<Videogame> implements VideogameFacadeLocal {
    @PersistenceContext(unitName = "EnterpriseApplication12-13-ejbPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public VideogameFacade() {
        super(Videogame.class);
    }
    /**
     * Cerca il Videogame nel Database
     *
     * @param v Videogame da cercare
     * @return true se il Videogame e' presente nel Database, false altrimenti
     */
    @Override
   public boolean videogameEsistente(Videogame v){
        String strSQL = "select * from Videogame v where UPPER(v.nome) ='"+ v.getNome().toUpperCase() + "'"+" AND v.piattaforma_id =" + v.getPiattaforma().getId() ;
        //String strSQL = "select * from Videogame as o where UPPER(o.nome) ='"+ v.getNome().toUpperCase() + "'"+" AND o.piattaforma_id =" + v.getPiattaforma().getId() ;
        //return !(em.createQuery(strSQL).getResultList().isEmpty());
        return !(em.createNativeQuery(strSQL).getResultList().isEmpty());
    }
    /**
     * Cerca tutti i Videogames del Database
     *
     * @return List<Videogame> lista dei Videogames presenti nel Database,  altrimenti restituisce una lista vuota 
     */
    @Override
    public List<Videogame> getVideogames(){//findAll
        return em.createQuery("select object(v) from Videogame as v",Videogame.class).getResultList();
    }

  /**
     * Cerca il Videogame con uno specifico id nel Database
     *
     * @param id identificativo del Videogame da cercare
     * @return Videogame il Videogame con identificativo id, null altrimenti
     */
    @Override
    public Videogame getVideogame(Long id){//find
         return em.createQuery("select object(v) from Videogame v where v.id ='" + id.toString() +"'",Videogame.class).getSingleResult();
    }
    /**
     * Ricerca i Videogames il cui nome matcha con il parametro Vid nel Database
     *
     * @param vid stringa di ricerca
     * @return List<Videogame> lista dei Videogames che soddisfano la ricerca, altrimenti restituisce una lista vuota 
     */
    @Override
    public List<Videogame> findVideogames(String vid){
        return em.createQuery("select object(v) from Videogame as v where UPPER(v.nome) LIKE '%" + vid.toUpperCase() + "%'",Videogame.class).getResultList();
    }
    
    @Override
    public List<Videogame> findAll(){
        return em.createQuery("select object(v) from Videogame as v ORDER BY v.nome",Videogame.class).getResultList();
    }
}